#include "CubeMouv.h"
#include "../Pion.h"

#include "../Ressources.h"


CubeMouv::CubeMouv(SDL_Rect p , SDL_Surface *ecran , Sens s) : PlateForme(p,ecran) {
	SDL_Surface *im = NULL;

	if(s == HORIZONTAL)
		im = Ressources::get_image(MOUVHORI);
	else
		im =  Ressources::get_image(MOUVVERTI);

	setImage(im);

	temps = ((double)SDL_GetTicks()/100.0) ;
	sens = (bool)(rand()%2);
	this->s = s;
	origine = p;
	amplitude = ecran->h/3;
}

bool CubeMouv::reagit(Pion *p){
	p->relancer(50);
	return true;
}

void CubeMouv::afficher(){
	double tempsAct =  ((double)SDL_GetTicks()/100.0) ;
	Taille taille = PlateForme::getAmplitudeCube();

	if(s == HORIZONTAL){
		if(position.x <= 0 || position.x <= origine.x-amplitude/2)
			sens = true;
		else if(position.x+taille.w > ecran->w || position.x + taille.w > origine.x + amplitude/2)
			sens = false;
	}
	else{
		if( position.y <= origine.y-amplitude/2)
			sens = true;
		else if( position.y + taille.h > origine.y + amplitude/2)
			sens = false;
	}

	if(tempsAct - temps > 0.1){
		if(sens){
           if(s == HORIZONTAL){
               position.x ++;
           }else{
               position.y ++;
           }
		}else{
            if(s == HORIZONTAL){
               position.x --;
           }else{
               position.y --;
           }
		}
		temps = tempsAct;
	}


	position.x %= ecran->w;

	PlateForme::afficher();
}

void CubeMouv::decaler(int nombre){
	origine.y += nombre;

	PlateForme::decaler(nombre);
}

Taille CubeMouv::getAmplitudeCube(){
	Taille ampli = PlateForme::getAmplitudeCube() ;

	if(sens == VERTICAL){
		ampli.h = amplitude;
	}else{
		ampli.w = amplitude;
	}

	return ampli;

}

SDL_Rect CubeMouv::getPositionIni(){
	SDL_Rect posIni ;
    posIni.x = origine.x;
    posIni.y = origine.y;

	if(sens == HORIZONTAL)
		posIni.x = origine.x - amplitude/2;
	else
		posIni.y = origine.y - amplitude/2;

	return posIni;
}
